"""
营销 - 商户活动修改模型
"""

from typing import Dict, Any, List
from jlpay.model.base import OrgBaseReq, BaseResponse
from jlpay.model.marketing.merchant_quota_info import MerchantQuotaInfo


class MerchantActivityUpdateRequest(OrgBaseReq):
    """商户活动修改请求"""
    
    def __init__(self):
        """初始化商户活动修改请求"""
        super().__init__()
        self.act_id = None  # 活动ID
        self.merch_no = None  # 商户号
        self.status = None  # 商户状态
        self.start_time = None  # 商户活动开始时间
        self.end_time = None  # 商户活动结束时间
        self.update_quotas = None  # 商户额度信息
    
    def set_act_id(self, act_id: str):
        """
        设置活动ID
        
        Args:
            act_id: 活动id
            
        Returns:
            MerchantActivityUpdateRequest实例
        """
        self.act_id = act_id
        return self
    
    def set_merch_no(self, merch_no: str):
        """
        设置商户号
        
        Args:
            merch_no: 商户号
            
        Returns:
            MerchantActivityUpdateRequest实例
        """
        self.merch_no = merch_no
        return self
    
    def set_status(self, status: str):
        """
        设置商户状态
        
        Args:
            status: remove：移除 join：参与
            
        Returns:
            MerchantActivityUpdateRequest实例
        """
        self.status = status
        return self
    
    def set_start_time(self, start_time: str):
        """
        设置商户活动开始时间
        
        Args:
            start_time: 格式yyyy-MM-dd HH:mm:ss 商户活动开始时间，开始时间不能早于活动ID的开始时间。不填则取活动的开始时间。商户活动开始后不能修改商户活动开始时间。
            
        Returns:
            MerchantActivityUpdateRequest实例
        """
        self.start_time = start_time
        return self
    
    def set_end_time(self, end_time: str):
        """
        设置商户活动结束时间
        
        Args:
            end_time: 格式yyyy-MM-dd HH:mm:ss 商户活动结束时间，结束时间不能晚于活动ID的结束时间。不填则取活动的结束时间。商户活动开始后可以修改商户活动结束时间，结束时间不能早于当前时间且不能晚于活动结束时间。
            
        Returns:
            MerchantActivityUpdateRequest实例
        """
        self.end_time = end_time
        return self
    
    def set_update_quotas(self, update_quotas: List[MerchantQuotaInfo]):
        """
        设置商户额度信息
        
        Args:
            update_quotas: 单独为商户配置活动额度，sort_value为计费类型数组字符串，update_total为最新的额度值，单位分
            具体的计费类型数组字符串，需要和活动配置的计费类型规则完全一致
            商户额度只能高于活动配置的额度，不能低于活动配置的额度
            示例值：[{"sort_value":"[\"01\",\"02\"]","update_total":"1001"},{"sort_value":"[\"30\",\"31\"]","update_total":"1001"}]
            
        Returns:
            MerchantActivityUpdateRequest实例
        """
        self.update_quotas = update_quotas
        return self
    
    def path(self) -> str:
        """
        获取接口路径
        
        Returns:
            接口路径
        """
        return "/open/org/bank/act-bridge/act-merch-relation/update"
    
    def to_dict(self) -> Dict[str, Any]:
        """
        将请求对象转换为字典，过滤掉值为None的字段
        
        Returns:
            字典对象
        """
        data = {k: v for k, v in self.__dict__.items() if not k.startswith('_') and v is not None}
        
        # 处理update_quotas字段
        if self.update_quotas:
            data['update_quotas'] = [quota.to_dict() for quota in self.update_quotas]
        
        return data


class MerchantActivityUpdateResponse(BaseResponse):
    """商户活动修改响应"""
    
    def __init__(self, response_dict=None):
        """
        初始化商户活动修改响应
        
        Args:
            response_dict: 响应字典
        """
        super().__init__(response_dict)
        # 该响应只包含ret_code和ret_msg，没有其他字段 